import axios from 'axios'
import { ElMessage } from 'element-plus'
import { useAuthStore } from '@/store/auth'

// 创建axios实例
const service = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL || '',
  timeout: 6000,
})

// 统一请求拦截处理
service.interceptors.request.use(
  config => {
    // 请求前事件处理: TODO
    // 查看token是否设置
    const authStore = useAuthStore();
    if (authStore.accessToken) config.headers['Authorization'] = `Bearer ${authStore.accessToken}`
    return config
  },
  error => {
    // 处理请求错误
    console.log("请求拦截器统一处理出错: ", error)
    return Promise.reject(error)
  }  
)

// 统一响应拦截处理
service.interceptors.response.use(
  response => {
    const res = response.data
    if (res.code !== 20000) {
      ElMessage({
        message: res.message || 'Backend Api Data Error', 
        type: 'error',
        duration: 5000,
      })
       return Promise.reject(new Error(res.message || 'Backend Api Data Error'))
    }
    // 其他后端自定义状态码处理: TODO
    return res
  },
  async error => {
    console.log("响应拦截器统一处理出错: ", error)
    const authStore = useAuthStore();
    if (error.response?.status === 401 && authStore.refreshToken) {
      // 尝试刷新 token
      const newToken = await authStore.refreshTokenAction()
      if (newToken) {
        error.config.headers['Authorization'] = `Bearer ${newToken}`;
        return instance(error.config); // 重试原请求
      }
    }
    return Promise.reject(error);
  }
)

export default service